# 自定义自响应控件(UI 交互层)

自响应控件可以响应表单的操作状态和权限状态。 目前祺佑三层开发框架定义了三种操作状态,九种权限状态。 每个自响应控件必须实现如下10个属性,以及UpdateState 方法和SetState方法

属性 取值 说明
OpCode 0 浏览(默认值) 1 新增 2 修改 控件的操作状态
isAdd 逻辑型 .T.(默认),.F. 新增权限
isEdit 逻辑型 .T.(默认),.F. 编辑权限
isDel 逻辑型 .T.(默认),.F. 删除权限
isCheck 逻辑型 .T.(默认),.F. 审核权限
isKeep 逻辑型 .T.(默认),.F. 记账权限
isPrint 逻辑型 .T.(默认),.F. 打印权限
isUd1 逻辑型 .T.(默认),.F. 自定权限1
isUd2 逻辑型 .T.(默认),.F. 自定权限2
isUd3 逻辑型 .T.(默认),.F. 自定权限3

那如何定义自响应控件呢? 首先选择你的制作的自定义控件,添加上表格中的10个属性,设置好默认值. 1、init事件添加如下代码

&&向主表单注册自身 Thisform.registerObserver(This)
1

2、添加一个自定义方法,方法名:UpdateState

Lparameters isadd,isedit,isdel,opcode,ischeck,isprint,iskeep,isud1,isud2,isud3
This.Isadd=isadd
This.Isedit=isedit
This.Isdel=isdel
This.Opcode=opcode
This.Ischeck=ischeck
This.Isprint=isprint
This.Iskeep=iskeep
This.Isud1=isud1
This.Isud2=isud2
This.Isud3=isud3
This.SetState()
1
2
3
4
5
6
7
8
9
10
11
12

3、添加自定义方法:方法名:SetState

If Inlist(This.Opcode,0)
   This.Enabled=.F.
Else
   This.Enabled=.T.
Endif
1
2
3
4
5

根据操作状态、权限状态来实现动当前控件的开闭,显示隐藏,只读或编辑。 例子 Textbox 控件的SetState 实现了按操作状态属性,浏览状态控件不可编辑,新增和编辑控件可以编辑。

If Inlist(This.Opcode,0)
   This.Enabled=.F.
Else
   This.Enabled=.T.
Endif
1
2
3
4
5

这样就把一个自响应控件制作成功了.